﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Emc.InputAccel.CaptureClient;
using mapfre.odeon;
using System.Data.SqlClient;
using System.Data;

namespace GENERALITAT_CATALUNYA
{
    public class Insertar_BBDD:CustomCodeModule
    {
        public override void ExecuteTask(IClientTask task, IBatchContext batchContext)
        {
            LogManager.log("=============================================================");
            LogManager.log("Incio Ejecución Módulo INSERTAR_NOTAS_BBDD");
            LogManager.log("Iniciando ejecución para lote: " + batchContext.BatchName + " con ID: " + batchContext.BatchId + "Fecha/hora: " + DateTime.Now.ToString());
            IBatchNode nodo_custom = batchContext.GetStepNode(task.BatchNode, "CustomValues");
            bool reprocesado = false;
            String cad_conexion = nodo_custom.NodeData.ValueSet.ReadString("Cadena_conexion_bbdd");

            try
            {

                //string cadena_conexion = nodo_custom.NodeData.ValueSet.ReadString("Cadena_conexion_bbdd");
               

                string cuaderno = nodo_custom.NodeData.ValueSet.ReadString("Cuaderno");
                string id_alunno = nodo_custom.NodeData.ValueSet.ReadString("Id_Alumno");

                string item = string.Empty;
                if (cuaderno == "1")
                {
                    item = nodo_custom.NodeData.ValueSet.ReadString("Item_CAT");

                }
                else if (cuaderno == "2")
                {
                    item = nodo_custom.NodeData.ValueSet.ReadString("Item_CAS");

                }
                else if (cuaderno == "3")
                {
                    item = nodo_custom.NodeData.ValueSet.ReadString("Item_MAT");

                }
                else if (cuaderno == "4")
                {
                    item = nodo_custom.NodeData.ValueSet.ReadString("Item_EXT");
                }

                string notas = nodo_custom.NodeData.ValueSet.ReadString("Notas");
                string ausente = nodo_custom.NodeData.ValueSet.ReadString("Ausente");
                string plantilla = nodo_custom.NodeData.ValueSet.ReadString("Plantilla");
                
                SqlConnection sqlConnection1 = new SqlConnection(cad_conexion + ";");
                SqlCommand cmd = new SqlCommand();
                SqlDataReader reader;

                //Consultar primero si existe

                cmd.CommandText = "SELECT * FROM respuestas WHERE id_alumno = '" + id_alunno + "' AND id_cuaderno = '" + cuaderno + "';";
                cmd.CommandType = CommandType.Text;
                cmd.Connection = sqlConnection1;

                LogManager.log(cmd.CommandText);
                try
                {
                    sqlConnection1.Open();
                    reader = cmd.ExecuteReader();
                    reprocesado = reader.HasRows;
                    LogManager.log("Analizando si el alumno" + id_alunno + " ya ha pasado por el proceso de digitalización....");
                    sqlConnection1.Close();

                }
                catch (Exception ex1)
                {
                    throw new Exception("ERROR EN BASE DE DATOS: " + ex1.Message);
                }

                if (reprocesado)
                {
                    //Si existe, updatear
                    //UPDATE respuestas SET items='caca',nota ='caca' ,[ausente]= 'S' ,[enviado_ws] = 'FALSE' WHERE id_alumno = '41059700036' and id_cuaderno = '4';

                    cmd.CommandText = "UPDATE respuestas SET items='"+item+"',nota ='"+notas+"' ,ausente= '"+ausente+"' ,enviado_ws = 'FALSE' WHERE id_alumno = '"+id_alunno+"' AND id_cuaderno = '"+cuaderno+"';";
                    cmd.CommandType = CommandType.Text;
                    cmd.Connection = sqlConnection1;

                    LogManager.log(cmd.CommandText);
                    try
                    {
                        sqlConnection1.Open();
                        reader = cmd.ExecuteReader();

                        LogManager.log("Esta alumno ya ha pasado por el proceso de digitalización " + id_alunno + " Se actualizan los datos en la base de datos");
                        sqlConnection1.Close();

                    }
                    catch (Exception ex1)
                    {
                        throw new Exception("ERROR EN BASE DE DATOS: " + ex1.Message);
                    }

                }
                else
                {
                    //Si no existe registro, insertar

                    cmd.CommandText = "INSERT INTO respuestas (id_cuaderno,id_alumno,items,nota,ausente,correcion_interna,nombre_materia,valoracion_prueba,enviado_ws,error_ws,corregido) VALUES ('" + cuaderno + "','" + id_alunno + "','" + item + "','" + notas + "','" + ausente + "','','" + plantilla + "','','FALSE','','TRUE');";
                    cmd.CommandType = CommandType.Text;
                    cmd.Connection = sqlConnection1;

                    LogManager.log(cmd.CommandText);
                    try
                    {
                        sqlConnection1.Open();

                        int num_filas = cmd.ExecuteNonQuery();

                        LogManager.log("INSERTADO El ALUMNO DEL CENTRO " + id_alunno + " afectadas " + num_filas.ToString() + " en la base de datos");
                        sqlConnection1.Close();

                    }
                    catch (Exception ex1)
                    {
                        throw new Exception("ERROR EN BASE DE DATOS: " + ex1.Message);
                    }

                }
               

                LogManager.log("=============================================================");
                task.CompleteTask();
            }
            catch(Exception ex)
            {
                LogManager.log("ERROR EN INSERTAR_NOTAS_BBDD");
                LogManager.log(ex.Message);
                LogManager.log(ex.StackTrace);

                task.FailTask(FailTaskReasonCode.GenericUnrecoverableError, ex);
            }
        }

        public override void StartModule(ICodeModuleStartInfo startInfo)
        {
            LogManager.moduleInfo = startInfo;
        }
    }
}
